﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>动态判断 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 动态判断 function specifies the criteria 遍历 subsequently created or modified 热键 variants." />
	<meta name="ahk:equiv-v1" content="commands/Hotkey.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>动态判断 / HotIfWin</h1>

<p>指定后续创建或修改热键<a href="Hotkey.htm#variant">变体</a>的条件.</p>
<p>目录:</p>
<ul>
  <li><a href="#If">动态判断</a></li>
  <li><a href="#IfWin">HotIfWin...</a></li>
  <li><a href="#remarks">备注</a></li>
  <li><a href="#examples">示例</a></li>
</ul>

<h2 id="If">动态判断</h2>
<pre class="Syntax">
<span class="func">动态判断</span> <span class="optional">"Expression"</span>
<span class="func">动态判断</span> <span class="optional">FunctionObject</span>
</pre>

<h3 id="Parameters">参数</h3>
<dl>

  <dt id="if-blank">(省略参数)</dt>
  <dd><p>设置空白条件(关闭上下文相关性).</p></dd>

  <dt id="if-expr">"Expression"</dt>
  <dd>
    <p>为现有的 <a href="_HotIf.htm">#动态判断</a> 表达式设置条件. <em>Expression</em> 通常写成一个<a href="../Language.htm#strings">加引号字符串</a>, 但也可以是一个变量或表达式, 返回与 #动态判断 表达式匹配的文本. 虽然这个函数不能创建新的表达式, 但它可以使用现有的表达式创建新的热键. 请参阅 <a href="_HotIf.htm#ExDynamic">#动态判断 示例 4</a>.</p>
    <p class="note"><strong>注意</strong>: 动态判断 函数使用你传递给它的字符串, 而不是原始源代码. 当脚本加载时, <a href="../misc/EscapeChar.htm">转义序列</a>会被解析, 所以只考虑结果字符; 例如, <code>动态判断 'x = "`t"'</code> 和 <code>动态判断 'x = "' 内_跳格 '"'</code> 都对应于 <code>#动态判断 x = "`t"</code>.</p>
  </dd>

  <dt id="if-func">FunctionObject</dt>
  <dd>
    <p>为给定的<a href="../objects/Functor.htm">函数对象</a>设置条件. 随后创建的热键只有在调用给定的函数对象产生一个非零的数字时才会执行. 这类似于 <code>动态判断 "Expression"</code>, 只不过每个热键可以有很多<a href="Hotkey.htm#variant">变体</a>(每个对象一个). <em>FunctionObject</em> 必须是具有一个 <em>call</em> 方法的对象, 该方法接受一个参数, 即热键的<a href="../Hotkeys.htm#HotBraces">名称</a>.</p>
    <p>一旦传递给 动态判断 函数, 该对象将永远不会被删除(但进程退出时, 内存将被操作系统回收).</p>
    <p><a href="Hotkey.htm#ExampleIfFn">"三键组合" 热键的例子</a>使用了 动态判断 这种模式.</p>
  </dd>

</dl>

<h2 id="IfWin">HotIfWin...</h2>
<pre class="Syntax">
<span class="func">动态判断窗口激活</span> <span class="optional">WinTitle, WinText</span>
<span class="func">动态判断窗口存在</span> <span class="optional">WinTitle, WinText</span>
<span class="func">动态判断窗口未激活</span> <span class="optional">WinTitle, WinText</span>
<span class="func">动态判断窗口不存在</span> <span class="optional">WinTitle, WinText</span>
</pre>

<h3 id="Parameters_3">参数</h3>
<dl>

  <dt>(省略所有参数)</dt>
  <dd><p>设置空白条件(关闭上下文相关性).</p></dd>

  <dt>WinTitle, WinText</dt>
  <dd>
    <p>指定用于识别窗口的窗口标题和其他条件. 根据所调用的函数, 受影响的热键和热字符串只有在匹配的窗口处于活动状态, 存在, 不活动, 或不存在时才会被激活.</p>
    <p>由于参数在函数被调用之前就已经被计算了, 因此任何变量引用都会在那一刻成为永久性的. 换句话说, 变量内容的后续变化不会被现有的热键看到.</p>
    <p><em>WinTitle</em> 和 <em>WinText</em> 的含义与 <a href="WinActive.htm">窗口已激活</a> 或 <a href="WinExist.htm">窗口存在</a> 中的相同, 但它们使用<a href="../Scripts.htm#auto">自动执行线程</a>设置的 <a href="SetTitleMatchMode.htm">设置标题匹配模式</a> 和 <a href="DetectHiddenWindows.htm">检测隐藏窗口</a> 的默认设置. 有关详情, 请参阅 <a href="../misc/WinTitle.htm">WinTitle</a>.</p>
  </dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p>如果 动态判断 的参数无效, 例如它不匹配现有的表达式, 并且不是一个有效的回调函数, 则抛出异常.</p>

<h2 id="remarks">备注</h2>
<p>动态判断 允许在脚本运行时创建和修改上下文相关的<a href="../Hotkeys.htm">热键</a>(相比之下, <a href="_HotIf.htm">#动态判断</a> 指令是位置性的, 在脚本开始执行前生效). 例如:</p>
<pre>动态判断窗口激活 "ahk_class Notepad"
热键 "^!e", "MyLabel"  <em>; 创建一个只在记事本中工作的热键.</em></pre>
<p>使用 动态判断 会使当前<a href="../misc/Threads.htm">线程</a>中把所有随后创建或修改的<a href="../Hotkeys.htm">热键</a>都变成上下文相关的, 并影响 <a href="Hotkey.htm">热键</a> 函数修改哪些热键变体. 只有最近一次对当前线程中任何 动态判断 函数的调用才会生效.</p>
<p>要关闭上下文相关性(也就是说, 使后续创建的热键在所有窗口中工作), 调用任意
 动态判断 函数, 但省略参数. 例如: <code>动态判断</code> 或 <code>动态判断窗口激活</code>.</p>
<p>在热键或热字串<a href="../misc/Threads.htm">线程</a>中使用 动态判断 之前, 热键和热串函数默认与启动该线程的热键或热串的上下文相同. 换句话说, <code>热键 内_此热键, "Off"</code> 关闭当前热键, 即使它是上下文相关的. 所有其他线程都默认创建或修改全局热键, 除非在<a href="../Scripts.htm#auto">脚本启动时</a>使用 动态判断 覆盖了该默认值.</p>
<p>使用 动态判断 函数或指令禁用鼠标或键盘热键后, 它会执行其原来的功能; 也就是说, 它传递到活动窗口, 就好像不存在热键一样. 然而, 操纵杆热键总是有效, 无论禁用与否.</p>

<h2 id="Related">相关</h2>
<p><a href="Hotkey.htm">热键</a>(函数), <a href="../Hotkeys.htm">热键</a>(描述), <a href="_HotIf.htm">#动态判断</a>, <a href="../misc/Threads.htm">线程</a></p>

<h2 id="examples">示例</h2>
<p>有关示例, 请参阅 <a href="Hotkey.htm#ExOther">热键</a>.</p>

</body>
</html>